home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 2888 / 2888.xpi / content / quicksearch.js < prev    next >
Text File  |  2008-04-26  |  9KB  |  254 lines

  1. var GMS;
  2. var txt;
  3. var results=new Array();
  4. var position=0;
  5. var lblPopup;
  6. var lastKeyPress=0;
  7. var strbundle = Components.classes["@mozilla.org/intl/stringbundle;1"].getService(Components.interfaces.nsIStringBundleService)
  8.           .createBundle("chrome://gmarks/locale/gmarks.properties");
  9. var statusImg;
  10. var qsObserver=null;
  11. function closeSearch(){
  12.   var d=new Date();
  13.   var time=d.valueOf();
  14.   if (time-lastKeyPress<700){
  15.     doGMQSUnload();
  16.   }
  17.   else
  18.     lastKeyPress=time;
  19. }
  20.  
  21. function handleKeypress(event){
  22.   var keycode=event.keyCode;
  23.   if (keycode==13){
  24.     //Enter
  25.     if (results.length>0)
  26.       openBookmark(results[position].url,event);
  27.     else{/* Act like URL bar */
  28.       var url = txt.value;
  29.       doGMQSUnload();
  30.       var where=event.altKey?"tab":whereToOpenLink(event,false,true);
  31.       openUILinkIn(url,where,true);
  32.  
  33.       // Firstly, fixup the url so that (e.g.) "www.foo.com" works
  34.       //const nsIURIFixup = Components.interfaces.nsIURIFixup;
  35.       //if (!gURIFixup)
  36.       //  gURIFixup = Components.classes["@mozilla.org/docshell/urifixup;1"]
  37.       //                                .getService(nsIURIFixup);
  38.       //url = gURIFixup.createFixupURI(url, nsIURIFixup.FIXUP_FLAGS_MAKE_ALTERNATE_URI).spec;
  39.     }
  40.   }
  41.   else if (keycode==38){
  42.     //Up
  43.     lblPopup.childNodes[position].className="gmPopupNormal";
  44.     position--;
  45.     if (position<0) position=results.length-1;
  46.     var selectedItem=lblPopup.childNodes[position];
  47.     selectedItem.className="gmPopupSelected";
  48.     var arrowbox=document.getAnonymousElementByAttribute(lblPopup,"class","popup-internal-box");
  49.     arrowbox.ensureElementIsVisible(selectedItem);
  50.   }
  51.   else if (keycode==40){
  52.     //Down
  53.     lblPopup.childNodes[position].className="gmPopupNormal";
  54.     position++;
  55.     if (position>=results.length) position=0;
  56.     var selectedItem=lblPopup.childNodes[position];
  57.     selectedItem.className="gmPopupSelected";
  58.     var arrowbox=document.getAnonymousElementByAttribute(lblPopup,"class","popup-internal-box");
  59.     arrowbox.ensureElementIsVisible(selectedItem);
  60.   }
  61. }
  62.  
  63. function qsHandleKeyUp(event){
  64.   if (GMS.qsKeyCode==event.keyCode){
  65.     closeSearch();
  66.   }
  67.   else if (event.keyCode==27){
  68.     doGMQSUnload();
  69.   }
  70. }
  71. window.addEventListener('keyup',qsHandleKeyUp,false);
  72.  
  73. function onMouseOver(i){
  74.   lblPopup.childNodes[position].className="gmPopupNormal";
  75.   position=i;
  76.   lblPopup.childNodes[position].className="gmPopupSelected";
  77. }
  78.  
  79. function onTooltipShowing(event){
  80.   var tooltip=event.target;
  81.   var title=document.createElement('description');
  82.     title.setAttribute('value',strbundle.GetStringFromName('title')+" "+results[position].title);
  83.   var url=document.createElement('description');
  84.     url.setAttribute('value',strbundle.GetStringFromName('url')+" "+results[position].url);
  85.   var lbls=document.createElement('description');
  86.     lbls.setAttribute('value',strbundle.GetStringFromName('labels')+" "+results[position].labels);
  87.   var notes=document.createElement('description');
  88.     notes.setAttribute('value',strbundle.GetStringFromName('notes')+" "+results[position].notes);
  89.  
  90.   tooltip.appendChild(title);
  91.   tooltip.appendChild(url);
  92.   tooltip.appendChild(lbls);
  93.   tooltip.appendChild(notes);
  94. }
  95.  
  96. function onTooltipHidden(event){
  97.   var tooltip=event.target;
  98.   for (var i=tooltip.childNodes.length-1;i>=0;i--){
  99.     tooltip.removeChild(tooltip.childNodes[i]);
  100.   }
  101. }
  102.  
  103. function doQuickSearchBookmarks(){
  104.   var query=txt.value;
  105.   position=0;
  106.   if (query.length>0 && GMS.bookmarkArray.length>0){
  107.     for (var i=lblPopup.childNodes.length-1;i>=0;i--){
  108.       lblPopup.removeChild(lblPopup.childNodes[i]);
  109.     }
  110.     results=GMS.getMatchingBookmarks(query);
  111.     if (results.length>0){
  112.       for (var i=0;i<results.length;i++){
  113.         var vbox=document.createElement("vbox");
  114.         var hbox=document.createElement("hbox");
  115.         hbox.setAttribute("flex","1");
  116.         vbox.setAttribute("flex","1");
  117.         vbox.setAttribute("style","padding: 2px;");
  118.         var mainlbl=document.createElement("label");
  119.         mainlbl.setAttribute("value",results[i].title+" - "+results[i].url);
  120.         if (GMS.showIcons){
  121.           var img=document.createElement("image");
  122.           if (results[i].image!=null){
  123.             var img=document.createElement("image");
  124.             img.setAttribute("style",'list-style-image: url("'+results[i].image+'");');
  125.  
  126.           }else{
  127.             img.setAttribute("style",
  128.               'list-style-image: url("chrome://global/skin/icons/folder-item.png"); -moz-image-region: rect(0px, 16px, 16px, 00px) !important;');
  129.           }
  130.           img.setAttribute("width", "16");
  131.           img.setAttribute("height","16");
  132.           hbox.appendChild(img);
  133.         }
  134.         hbox.appendChild(mainlbl);
  135.         vbox.appendChild(hbox);
  136.         if (results[i].notes!=null && results[i].notes.length>0){
  137.           var notes=document.createElement("label");
  138.           notes.setAttribute("value",results[i].notes);
  139.           notes.setAttribute("style","padding-left: 35px;");
  140.           vbox.appendChild(notes);
  141.         }
  142.         //vbox.setAttribute("oncommand",'openBookmark("'+results[i].url+'",event);');
  143.         vbox.setAttribute("onclick",'if (event.button!=2) openBookmark("'+results[i].url+'",event);');
  144.         vbox.setAttribute("onmouseover",'onMouseOver('+i+');');
  145.         vbox.setAttribute('value',i);
  146.         vbox.setAttribute('id',"r_"+i);
  147.         vbox.setAttribute('tooltip','gmqsTooltip');
  148.  
  149.         if (i>0) vbox.className="gmPopupNormal";
  150.         else vbox.className="gmPopupSelected";
  151.  
  152.         lblPopup.appendChild(vbox);
  153.  
  154.       }
  155.  
  156.       lblPopup.showPopup(txt,txt.boxObject.screenX-20,txt.boxObject.screenY+txt.boxObject.height,"popup");
  157.     }
  158.     else
  159.       lblPopup.hidePopup();
  160.   }
  161.   else{
  162.     lblPopup.hidePopup()
  163.   }
  164. }
  165.  
  166. function openBookmark(url,event){
  167.   var bookmarkPrefs=Components.classes["@mozilla.org/preferences-service;1"].
  168.                             getService(Components.interfaces.nsIPrefService).getBranch("extensions.tabmix.");
  169.   var gmarksPrefs=Components.classes["@mozilla.org/preferences-service;1"].
  170.                             getService(Components.interfaces.nsIPrefService).getBranch("gmarks");
  171.   var bkmkNewTab;
  172.   try{
  173.     bkmkNewTab=bookmarkPrefs.getBoolPref("opentabfor.bookmarks");
  174.   }
  175.   catch(e){bkmkNewTab=false;}
  176.   bkmkNewTab=bkmkNewTab || gmarksPrefs.getBoolPref('.openinnewtab') || event.altKey;
  177.   doGMQSUnload();
  178.   if (!bkmkNewTab){
  179.     openUILink(url,event,false,true);
  180.   }
  181.   else{
  182.     if (event.shiftKey==true)
  183.       openUILinkIn(url,"tabshifted");
  184.     else
  185.       openUILinkIn(url,"tab");
  186.   }
  187. }
  188.  
  189. function doGMQSLoad(){
  190.   GMS=Components.classes["@mozilla.org/gmarks;1"]
  191.                      .getService(Components.interfaces.nsIGMarksService).wrappedJSObject;
  192.     if (GMS.qsKey!="Home"){
  193.       var lbl=document.getElementById("qSearchLabel");
  194.       lbl.value=lbl.value.replace('Home',GMS.qsKey);
  195.     }
  196.   txt=document.getElementById("gmarks-txtQuickSearch");
  197.   lblPopup=document.getElementById("gmqsResults");
  198.   setTimeout(function(){txt.focus()},0);
  199.   statusImg=document.getElementById("statusImg");
  200.  
  201.   if (GMS.recievedBookmarks==0 && !GMS.isSignedIn && GMS.bookmarkArray.length==0){
  202.     if (GMS.checkSignedCookie()){
  203.       statusImg.setAttribute("hidden","false");
  204.       qsObserver=new GM_QSObserverControl();
  205.       GMS.getBookmarksFeed("onload",true);
  206.     }
  207.     else{
  208.       var prefs = Components.classes["@mozilla.org/preferences-service;1"].
  209.           getService(Components.interfaces.nsIPrefService).
  210.           getBranch("gmarks");
  211.       var auto=prefs.getBoolPref(".signin");
  212.       if (auto){
  213.         var pass=GMS.getPassInfo();
  214.         if (pass){
  215.           statusImg.setAttribute("hidden","false");
  216.           qsObserver=new GM_QSObserverControl();
  217.           GMS.onSignIn(false,pass.user,pass.password,"onload",false);
  218.         }
  219.  
  220.       }
  221.     }
  222.   }
  223. }
  224.  
  225. function doGMQSUnload(){
  226.   lblPopup.hidePopup
  227.   if (qsObserver!=null)
  228.     qsObserver.unregister();
  229.   window.close();
  230. }
  231.  
  232. function GM_QSObserverControl()
  233. {
  234.   this.register();
  235. }
  236. GM_QSObserverControl.prototype = {
  237.     observe: function(subject, topic, data) {
  238.     if (topic=="gmarks-onload"){
  239.       statusImg.setAttribute("hidden","true");
  240.     }
  241.     },
  242.     register: function() {
  243.       var observerService = Components.classes["@mozilla.org/observer-service;1"]
  244.                           .getService(Components.interfaces.nsIObserverService);
  245.       observerService.addObserver(this, "gmarks-onload", false);
  246.     },
  247.     unregister: function() {
  248.       var observerService = Components.classes["@mozilla.org/observer-service;1"]
  249.                             .getService(Components.interfaces.nsIObserverService);
  250.       observerService.removeObserver(this, "gmarks-onload");
  251.   }
  252. }
  253. window.addEventListener('load',doGMQSLoad,false);
  254.